014_2カスタム投稿の「カテゴリー」と「タグ」を表示するようにする
「カスタム投稿」を作るにプラス、覚書メモ
「通常投稿」には、「カテゴリー」と「タグ」の仕様が標準についてますが、
自作で「カスタム投稿」を作った場合は、自分で定義を追加しないと「カテゴリー」も「タグ」も使えるようにはなっていないです。
いちいち設定しないと「存在しない」というのはなにかと不便ですが、これも wordpress の仕組みを理解する上でも大事なことかな、と思って設定したいと思います。
「カテゴリー」「タグ」も、実は「タクソノミー」
調べてみると、
どうやら「カテゴリー」と「タグ」は、両方とも同じ「タクソノミー(訳すと=分類)」という言葉で定義するようです。
設定では 'hierarchical' という部分を true にするか、false にするか、の違いだけのようです。
trueだと=カテゴリー になり、
false だと=タグ になります。
「カスタム投稿」に「カテゴリー」と「タグ」を設定する
functions.php に下記を追記します
もちろん、「カスタム投稿」を複数作った場合は、それぞれに設定が必要です。
下記↓はひとつ分です。(一例として「イラスト」のカスタム投稿)
//カテゴリータイプ $args = array( 'label' => 'カテゴリー', 'public' => true, 'show_ui' => true, 'hierarchical' => true ); register_taxonomy('illust_category','illust',$args); //タグタイプ $args = array( 'label' => 'タグ', 'public' => true, 'show_ui' => true, 'hierarchical' => false ); register_taxonomy('illust_tag','illust',$args);
実際に追記したのが下記です。(functions.php に追記する)
(26行目~41行目)
↓
<?php //カスタム投稿生成 add_action('init', 'my_custom_post_type'); //WordPressの読み込みが完了し、ヘッダーが送信される前にmy_custom_post_typeをフック function my_custom_post_type() { $labels = array( 'name' => 'イラスト', //投稿タイプの一般名 'add_new_item' => '新規イラストを追加', 'not_found' => __('イラストは見つかりませんでした'), //投稿がない場合の管理画面のカスタム投稿タイプ一覧に表示されるテキスト 'new_item' => __('新しいイラスト'), //編集画面のタイトル 'view_item' => __('イラストを表示') //記事編集画面の「プレビュー」のテキスト ); $args = array( 'labels' => $labels, //この投稿タイプのラベルの配列 'public' => true, //publicly_queriable, show_ui, show_in_nav_menus, exclude_from_searchのデフォルト値を定義するメタ引数 'publicly_queryable' => true, //フロントエンドで post_type クエリが実行可能かどうか 'show_ui' => true, //この投稿タイプを管理するデフォルト UI を生成するかどうか 'exclude_from_search' => false, //この投稿タイプを検索結果から除外するかどうか 'capability_type' => 'post', //投稿タイプの閲覧/編集/削除権限をチェックするのに使用。初期値: "post" 'rewrite' => true, //このフォーマットでパーマリンクをリライトする 'hierarchical' => false, //この投稿タイプが階層(親の指定が許可されている)かどうか 'menu_position' => 5, //投稿タイプが表示される管理画面のメニューの位置 'supports' => array('title','editor','thumbnail', 'excerpt','comments','trackbacks') //add_post_type_support()を直接呼び出すエイリアス ); register_post_type('illust',$args); //カスタム投稿タイプとその動作を定義する設定名(single.phpに追加する名前でもある) //カテゴリータイプ $args = array( 'label' => 'カテゴリー', 'public' => true, 'show_ui' => true, 'hierarchical' => true ); register_taxonomy('illust_category','illust',$args); //タグタイプ $args = array( 'label' => 'タグ', 'public' => true, 'show_ui' => true, 'hierarchical' => false ); register_taxonomy('illust_tag','illust',$args); $labels = array( 'name' => 'comic', //投稿タイプの一般名 //以下略 } ?>作った「カスタム投稿」の数分だけ追記します。
パーマリンクを空更新
カスタム投稿を作った時と同じく
functions.php に追記して保存した後、メニュー → 設定 → パーマリンクを、空更新しておきました。
記事を投稿してみる
これで、管理画面上で、「カスタム投稿」の「カテゴリー(と表示名をつけたタクソノミー)枠」と、同じく「タグ(と表示名をつけたタクソノミー)枠」ができました。
さっそく記事を投稿して、試しにタグを入力してみたいと思います。
入力したものの、プレビューしても出てこない
しかし、タグを入力後、プレビューしてみても、タグが表示されません・・・
これは、テンプレート(single-xxx.php)の中に、「タクソノミーを表示する」というコードを、まだ書いてないからです。
「カスタム投稿」の「カテゴリー」と「タグ」を出力させるには
いろいろぐぐって、試してみた結果、
下記のように書けば、「カテゴリー(タクソノミー)」と「タグ(同じくタクソノミー)」の文字が表示できるようになりました。
(1~6行目が「カテゴリー」、7~12行目が「タグ」)
↓
<?php $taxolist = get_the_term_list( $post->ID, 'illust_category', 'カテゴリー:', '、', '' ); if($taxolist): ?> <dd><?php echo $taxolist; ?></dd> <?php endif; ?> <?php $taxolist2 = get_the_term_list( $post->ID, 'illust_tag', 'タグ:', '、','' ); if($taxolist2): ?> <dd><?php echo $taxolist2; ?></dd> <?php endif; ?>
「出力結果」は、
↓
(見た目のデザインは、スタイル定義によって変わります)
上記のコードは、出力したい部分(例えば:single-llust.php や archive-illust.php など)に記述します。